package net.lulihu.common_util.jdbc;

import java.sql.Connection;
import java.util.List;
import java.util.Map;

/**
 * Sql语句执行程序
 */
public interface SqlStatementExecutor {

    /**
     * 执行修改语句
     *
     * @param connection 数据库连接
     * @param sql        sql语句
     * @param params     占位符替换参数
     * @return 返回影响行数
     */
    int executeUpdate(Connection connection, String sql, Object... params);

    /**
     * 执行查询语句返回一条数据
     *
     * @param connection      数据库连接
     * @param resultClass     返回值类型
     * @param propertyMapping bean属性与数据表列名称映射 ; key->数据表列明  value->对象属性名称
     * @param sql             sql语句
     * @param params          占位符替换参数
     * @param <T>             泛型
     * @return 查询结果
     */
    <T> T executeQueryOne(Connection connection, Class<T> resultClass, Map<String, String> propertyMapping, String sql, Object... params);

    /**
     * 执行查询语句返回多条数据
     *
     * @param connection      数据库连接
     * @param resultListClass 集合返回值类型
     * @param resultClass     返回值类型
     * @param propertyMapping bean属性与数据表列名称映射 ; key->数据表列名  value->对象属性名称
     * @param sql             sql语句
     * @param params          占位符替换参数
     * @param <T>             泛型
     * @return 查询结果
     */
    <T> List<T> executeQueryList(Connection connection, Class<? extends List> resultListClass,
                                 Class<T> resultClass, Map<String, String> propertyMapping, String sql, Object... params);

}
